package com.ssr.master.common.utils;

import org.apache.shiro.crypto.hash.*;

/**
 * @author ZhangPeng
 * @Description //todo 加密工具类
 * @date
 * @updateBy
 * @other
 **/

public class Encrypt {

    /*
     * 散列算法一般用于生成数据的摘要信息，是一种不可逆的算法，一般适合存储密码之类的数据，
     * 常见的散列算法如MD5、SHA等。一般进行散列时最好提供一个salt（盐），比如加密密码“admin”，
     * 产生的散列值是“21232f297a57a5a743894a0e4a801fc3”，
     * 可以到一些md5解密网站很容易的通过散列值得到密码“admin”，
     * 即如果直接对密码进行散列相对来说破解更容易，此时我们可以加一些只有系统知道的干扰数据，
     * 如用户名和ID（即盐）；这样散列的对象是“密码+用户名+ID”，这样生成的散列值相对来说更难破解。
     */

    //高强度加密算法,不可逆
    public static String md5(String password, String salt){
        return new Md5Hash(password,salt,2).toString();
    }

    public static void main(String[] args) {
        /**
         * new Md5Hash("123456","lisi",1) :1b539b60601b934441308049a9526e7d
         * new Md5Hash("123456","lisi",2) :42bd4e7685cb11d3ba02716c313cb04b
         * new Md5Hash("123456","lisi",3) :16f807d62105b4896034552ee5caeb8a
         * new Md5Hash("123456","KMNO4",3):8bd35dc14dc07f756478bb44513694f6
         */
        //System.out.println(new Md5Hash("123456","KMNO4",3).toString());


        /**
         * sha家族加密算法
         * sha1：aca1eb31d2dcf8f1fcf3fd7a7104232785afad41     40 位
         * sha256： 616a47d8e1e42f23693bb3a85749bf18d4b6e5380ddfd5717aafa61e33d5211e
         * sha384：84f5cbb18e2d9f1c81b8cec6f443a2b229993689a2ebae97db37e13af1dfb00ec6168713a53fe19d33a63d4d30889553
         * sha512：c3e5102b6a7ec6caa5b255dae2895b11c2ef0c7b9bfea8e848653372b53f3ef665d96ea283a21eac683cc0fe5c4b1f64692c2056a8a9636ee1931151043d2b5d
         */
        System.out.println("sha1："+new Sha1Hash("123456","lisi",2));
        System.out.println("sha256："+new Sha256Hash("123456","lisi",2));
        System.out.println("sha384："+new Sha384Hash("123456","lisi",2));
        System.out.println("sha512："+new Sha512Hash("123456","lisi",2));

    }
}
